/**
 * 
 */
package com.gr.experimental.model;

import java.util.List;

import com.gr.experimental.model.impl.distr.DistributionException;



/**
 * 
 * @author Karol Banczyk
 *
 */
public interface Distribution {

	/**
	 * @return the domain of a variable
	 */
	List<UID> getDomain();
	
	/**
	 * @return the random variable classes that this
	 * distribution depends on.
	 */
	List<RVClass> getConditionRVClasses(); 
	
	/**
	 * @param partialWorldState partial world state, i.e. numbers of distinct 
	 * parent states,
	 * @return distribution for a partial world state
	 */
	double[] getProbabilities(List<RVClassInfluence> partialWorldState) 
		throws DistributionException;

	/**
	 * @return the default distribution.
	 */
	double[] getProbabilities()
		throws DistributionException;
}
